package att_java ;

/**
 * Décrit une méthode. Insérée dans une TDM (Table des Méthodes).
 */
public class INFO_METHODE extends INFO {

	/**
	 * Chaîne de caractère indiquant le type de retour de cette méthode (et
	 * donc sa taille).
	 */
	protected String nom_type ;
	protected int deplacement ;
	protected String etiquette ;
	
	/**
	 * TDV (Table des Variables) contenant les arguments de cette méthode.
	 */
	protected TDV tdv ;
	
	public INFO_METHODE (String nom, String nom_type, int deplacement, String etiquette) {
		
		super(nom) ;
		
		this.nom_type = nom_type ;
		this.tdv = new TDV_Neg() ;
		this.deplacement = deplacement ;
		this.etiquette = etiquette ;
		
	}
	
	/**
	 * Retourne le nom du type de cet attribut.
	 * 
	 * @return Nom du type de cet attribut.
	 */
	public String getNomType ( ) {
		
		return this.nom_type ;
		
	}
	
	/**
	 * Retourne la TDV contenant les arguments de cette méthode.
	 * 
	 * @return TDV contenant les arguments de cette méthode.
	 */
	public TDV getTDV ( ) {
		
		return this.tdv ;
		
	}
	
	public void setDeplacement (int deplacement) {
		
		this.deplacement = deplacement ;
		
	}
	
	public int getDeplacement ( ) {
		
		return this.deplacement ;
		
	}
	
	public void setEtiquette (String etiquette) {
		
		this.etiquette = etiquette ;
		
	}
	
	public String getEtiquette ( ) {
		
		return this.etiquette ;
		
	}
	
	public Signature getSignature ( ) {
		
		Signature signature = new Signature() ;
		
		for (INFO_VARIABLE variable : this.tdv.table) {
			signature.add(variable.getNomType()) ;
		}
		
		return signature ;
		
	}
	
	public String toString ( ) {
		
		return this.toString("") ;
		
	}
	
	public String toString (String prefix) {
		
		return prefix + "INFO_METHODE:" + this.nom + "(type:" + this.nom_type + "(" + GenTAM.getTaille(this.nom_type) + "), deplacement:" + this.deplacement +", etiquette:" + this.etiquette + ")" + "\n" + this.tdv.toString(prefix + "\t") ;
		
	}
	
}
